﻿using Service;
using System;
using System.Text;
using System.Threading;

namespace Worker.Consumer
{
    class Program
    {
        static void Main(string[] args)
        {
            var queueName = "TRabbitWokerMQ";

            MessageQueue consumer = new MessageQueue("106.55.163.36", 5672, "admin", "qq1226550632");
            var connect = consumer.GetMessage(queueName, (model, ea,channel) =>
            {
                var message = Encoding.UTF8.GetString(ea.Body.ToArray());
                Console.WriteLine($"Receive:{message},Task Start...");
                int does = message.Split('.').Length - 1;
                Thread.Sleep(does * 1000);
                Console.WriteLine($"Complete:{message}，Time：{does}s");

                //手动消息确认
                //*忘记进行确认是一个常见的错误虽然是个简单的错误，但是后果严重。
                //消息会在客户端退出后重新投送（就像是随机进行的重新投送），
                //但是由于RabbitMQ无法释放任何未经确认的消息，内存占用会越来越严重。*
                //解决方案:在服务器将消息调试出来手动进行删除。
                channel.BasicAck(ea.DeliveryTag, false);

            }, autoAck: false);

            Console.ReadLine();
            connect.Close();
        }
    }
}
